package org.maodian.shindigbook.social.facebook.model;

import org.joda.time.DateTime;

/**
 * Stands for an Album object in <a
 * href="http://developers.facebook.com/docs/reference/api/">Facebook Graph
 * API</a>. See <a
 * href="http://developers.facebook.com/docs/reference/api/album">Facebook
 * Album</a>.
 * 
 * @author Pigwen
 * 
 */
public interface Album {

  /**
   * The fields that represent the Album object in json form.
   * 
   * @author Pigwen
   * 
   */
  public static enum Field {
    ID("id"),
    FROM("from"),
    NAME("name"),
    DESCRIPTION("description"),
    LOCATION("location"),
    LINK("link"),
    PRIVACY("privacy"),
    COUNT("count"),
    CREATED_TIME("created_time"),
    UPDATED_TIME("updated_time"),
    COMMENTS("comments");
    /**
     * The json field that the instance represents.
     */
    private final String jsonString;

    /**
     * create a field base on the a json element.
     *
     * @param jsonString the name of the element
     */
    private Field(String jsonString) {
      this.jsonString = jsonString;
    }

    /**
     * emit the field as a json element.
     *
     * @return the field name
     */
    @Override
    public String toString() {
      return this.jsonString;
    }
  }
  
  void setId(String id);
  
  String getId();
  
  void setFrom(Publisher publisher);
  
  Publisher getPublisher();
  
  void setName(String name);
  
  String getName();
  
  void setDescription(String description);
  
  String getDescription();
  
  void setLocation(String location);
  
  String getLocation();
  
  void setLink(String link);
  
  String getLink();
  
  void setPrivacy(String privacy);
  
  String getPrivacy();
  
  void setCount(int count);
  
  int getCount();
  
  void setCreatedTime(DateTime createdTime);
  
  DateTime getCreatedTime();
  
  void setUpdatedTime(DateTime updatedTime);
  
  DateTime getUpdatedTime();
}
